﻿#include "commonblowair.h"

#include <QApplication>
#include <QFile>
#include <QDebug>


CommonBlowair  * CommonBlowair::m_commonBlowair = NULL;
CommonBlowair::CommonBlowair(QObject *parent) : QObject(parent)
{
    initPin();
}

CommonBlowair::~CommonBlowair()
{

}

void CommonBlowair::initPin()
{
    m_commonMap.clear();
    m_realMap.clear();
    QString docParhFile =  QApplication::applicationDirPath();
    m_docParhRealFile = docParhFile;
    docParhFile +="/configs/commonblowair.json";
    m_docParhRealFile +="/configs/realblowair.json";


    QFile files(docParhFile);
    if(files.open(QIODevice::ReadOnly)){
        QString inforsa = files.readAll();
#ifdef DEBUG_INFOR
        qDebug()<<typeid(this).name()<<__func__<<__LINE__<<inforsa;
#endif
        QJsonParseError errors;
        QJsonDocument doc = QJsonDocument::fromJson(inforsa.toUtf8(),&errors);
#ifdef DEBUG_INFOR
        qDebug()<<typeid(this).name()<<__func__<<__LINE__<<errors.error;
#endif
        if(errors.error == QJsonParseError::NoError){
#ifdef DEBUG_INFOR
            qDebug()<<typeid(this).name()<<__func__<<__LINE__<<doc;
#endif
            QJsonArray arrya = doc.array();
#ifdef DEBUG_INFOR
            qDebug()<<typeid(this).name()<<__func__<<__LINE__<<arrya;
#endif
            for(int i = 0 ; i < arrya.size() ;i++ ){
                QJsonObject itema = arrya.at(i).toObject();
#ifdef DEBUG_INFOR
                qDebug()<<typeid(this).name()<<__func__<<__LINE__<<itema;
#endif
                int user_pin = itema.take("user_pin").toInt();
                int run_times = itema.take("run_times").toInt();
                int stop_times = itema.take("stop_times").toInt();
                QPair<int ,int> pairs(run_times,stop_times);
                m_commonMap.insert(user_pin,pairs);
            }
        }
        files.close();
    }
#ifdef DEBUG_INFOR
    qDebug()<<typeid(this).name()<<__func__<<__LINE__<<m_commonMap;
#endif
    QFile afiles(m_docParhRealFile);
    if(afiles.exists()){
        if(afiles.open(QIODevice::ReadOnly)){
            QString inforsa = afiles.readAll();
            QJsonParseError errors;
            QJsonDocument doc = QJsonDocument::fromJson(inforsa.toUtf8(),&errors);
            if(errors.error == QJsonParseError::NoError){
                QJsonArray arrya = doc.array();
                for(int i = 0 ; i < arrya.size() ;i++ ){
                    QJsonObject itema = arrya.at(i).toObject();
                    int user_pin = itema.take("user_pin").toInt();
                    int run_times = itema.take("run_times").toInt();
                    int stop_times = itema.take("stop_times").toInt();
                    QPair<int ,int> pairs(run_times,stop_times);
                    m_realMap.insert(user_pin,pairs);
                }
            }
            afiles.close();
        }
#ifdef DEBUG_INFOR
        qDebug()<<typeid(this).name()<<__func__<<__LINE__<<m_realMap;
#endif
    }else{
        m_realMap = m_commonMap;

        saveRealBlowair();
    }
#ifdef DEBUG_INFOR
    qDebug()<<typeid(this).name()<<__func__<<__LINE__<<m_realMap;
    qDebug()<<typeid(this).name()<<__func__<<__LINE__<<m_commonMap;
#endif
}

CommonBlowair *CommonBlowair::gestance()
{
    if(m_commonBlowair == NULL){

        m_commonBlowair = new CommonBlowair();
    }

    return m_commonBlowair;
}

void CommonBlowair::saveRealBlowair()
{
#ifdef DEBUG_INFOR
    qDebug()<<typeid(this).name()<<__func__<<__LINE__<<m_realMap;
#endif
    QMap<int ,QPair<int ,int> >::iterator ita = m_realMap.begin();
    QJsonArray arrys;
    for(; ita != m_realMap.end() ;ita++){
        //m_re
        QJsonObject itema ;

        QPair<int ,int> paira = ita.value();
        itema.insert("user_pin",ita.key());
        itema.insert("run_times",paira.first);
        itema.insert("stop_times",paira.second);
        arrys.append(itema);
    }
    QJsonDocument doca(arrys);
    QFile afiles(m_docParhRealFile);
    if(afiles.open(QIODevice::WriteOnly)){
        afiles.write(doca.toJson());
        afiles.flush();
        afiles.close();
    }
}

void CommonBlowair::insertData(int pins, int runtimes, int stoptimes)
{
#ifdef DEBUG_INFOR
    qDebug()<<typeid(this).name()<<__func__<<__LINE__<<"pins=="<<pins;
    qDebug()<<typeid(this).name()<<__func__<<__LINE__<<"runtimes=="<<runtimes;
    qDebug()<<typeid(this).name()<<__func__<<__LINE__<<"stoptimes=="<<stoptimes;
#endif
    QPair<int ,int> pair(runtimes,  stoptimes);
    m_realMap.insert(pins,pair);
    //saveRealBlowair();
}

void CommonBlowair::restoreData()
{
    m_realMap = m_commonMap;

    saveRealBlowair();
}

QList<int> CommonBlowair::keyPins()
{

    return  m_realMap.keys();
}

QPair<int, int> CommonBlowair::getPinData(int pins)
{
    QPair<int, int> pairs = m_realMap.value(pins);

    return pairs;
}
